const less = require('less')
const { readFileSync } = require('fs')
const path = require('path')
const postcss = require('postcss')
const NpmImportPlugin = require('less-plugin-npm-import')
const postcssConfig = require('./postcssConfig')

function transformLess (lessFile, config = {}) {
  const { cwd = process.cwd() } = config
  const resolvedLessFile = path.resolve(cwd, lessFile)

  let data = readFileSync(resolvedLessFile, 'utf-8')
  data = data.replace(/^\uFEFF/, '')

  // Do less compile
  const lessOpts = {
    paths: [path.dirname(resolvedLessFile)],
    filename: resolvedLessFile,
    plugins: [
      new NpmImportPlugin({ prefix: '~' }),
    ],
  }
  return less.render(data, lessOpts)
    .then((result) => {
      const source = result.css
      return postcss(postcssConfig.plugins).process(source)
    })
    .then((r) => {
      return r.css
    })
}

module.exports = transformLess
